package com.geo.content.dto;

import java.util.List;
import java.util.Map;

/**
 * 内容生成请求DTO
 */
public class ContentGenerationRequest {
    
    /**
     * 目标关键词
     */
    private List<String> targetKeywords;
    
    /**
     * 内容类型（文章、问答、产品描述等）
     */
    private String contentType;
    
    /**
     * 内容长度要求
     */
    private Integer contentLength;
    
    /**
     * 目标受众
     */
    private String targetAudience;
    
    /**
     * 写作风格
     */
    private String writingStyle;
    
    /**
     * 企业信息
     */
    private String companyInfo;
    
    /**
     * 产品/服务信息
     */
    private String productInfo;
    
    /**
     * 额外的上下文信息
     */
    private String contextInfo;
    
    /**
     * 语言偏好
     */
    private String language;
    
    /**
     * 是否需要SEO优化
     */
    private Boolean seoOptimized;
    
    /**
     * 参考链接
     */
    private List<String> referenceUrls;
    
    /**
     * 自定义参数
     */
    private Map<String, Object> customParameters;
    
    /**
     * 用户ID
     */
    private String userId;
    
    /**
     * 标题
     */
    private String title;
    
    /**
     * 描述
     */
    private String description;
    
    /**
     * 语调风格
     */
    private String tone;
    
    /**
     * 目标字数
     */
    private Integer targetWordCount;
    
    /**
     * 额外要求
     */
    private String additionalRequirements;
    
    /**
     * 商户ID
     */
    private String merchantId;
    
    /**
     * 创意度
     */
    private Double creativity;
    
    /**
     * 关键词ID
     */
    private String keywordId;
    
    /**
     * 标签
     */
    private String tags;
    
    /**
     * 分类
     */
    private String category;
    
    // 构造函数
    public ContentGenerationRequest() {}
    
    public ContentGenerationRequest(List<String> targetKeywords, String contentType) {
        this.targetKeywords = targetKeywords;
        this.contentType = contentType;
    }
    
    // Getters and Setters
    public List<String> getTargetKeywords() {
        return targetKeywords;
    }
    
    public void setTargetKeywords(List<String> targetKeywords) {
        this.targetKeywords = targetKeywords;
    }
    
    public String getContentType() {
        return contentType;
    }
    
    public void setContentType(String contentType) {
        this.contentType = contentType;
    }
    
    public Integer getContentLength() {
        return contentLength;
    }
    
    public void setContentLength(Integer contentLength) {
        this.contentLength = contentLength;
    }
    
    public String getTargetAudience() {
        return targetAudience;
    }
    
    public void setTargetAudience(String targetAudience) {
        this.targetAudience = targetAudience;
    }
    
    public String getWritingStyle() {
        return writingStyle;
    }
    
    public void setWritingStyle(String writingStyle) {
        this.writingStyle = writingStyle;
    }
    
    public String getCompanyInfo() {
        return companyInfo;
    }
    
    public void setCompanyInfo(String companyInfo) {
        this.companyInfo = companyInfo;
    }
    
    public String getProductInfo() {
        return productInfo;
    }
    
    public void setProductInfo(String productInfo) {
        this.productInfo = productInfo;
    }
    
    public String getContextInfo() {
        return contextInfo;
    }
    
    public void setContextInfo(String contextInfo) {
        this.contextInfo = contextInfo;
    }
    
    public String getLanguage() {
        return language;
    }
    
    public void setLanguage(String language) {
        this.language = language;
    }
    
    public Boolean getSeoOptimized() {
        return seoOptimized;
    }
    
    public void setSeoOptimized(Boolean seoOptimized) {
        this.seoOptimized = seoOptimized;
    }
    
    public List<String> getReferenceUrls() {
        return referenceUrls;
    }
    
    public void setReferenceUrls(List<String> referenceUrls) {
        this.referenceUrls = referenceUrls;
    }
    
    public Map<String, Object> getCustomParameters() {
        return customParameters;
    }
    
    public void setCustomParameters(Map<String, Object> customParameters) {
        this.customParameters = customParameters;
    }
    
    public String getUserId() {
        return userId;
    }
    
    public void setUserId(String userId) {
        this.userId = userId;
    }
    
    public String getTitle() {
        return title;
    }
    
    public void setTitle(String title) {
        this.title = title;
    }
    
    public String getDescription() {
        return description;
    }
    
    public void setDescription(String description) {
        this.description = description;
    }
    
    public String getTone() {
        return tone;
    }
    
    public void setTone(String tone) {
        this.tone = tone;
    }
    
    public Integer getTargetWordCount() {
        return targetWordCount;
    }
    
    public void setTargetWordCount(Integer targetWordCount) {
        this.targetWordCount = targetWordCount;
    }
    
    public String getAdditionalRequirements() {
        return additionalRequirements;
    }
    
    public void setAdditionalRequirements(String additionalRequirements) {
        this.additionalRequirements = additionalRequirements;
    }
    
    public String getMerchantId() {
        return merchantId;
    }
    
    public void setMerchantId(String merchantId) {
        this.merchantId = merchantId;
    }
    
    public Double getCreativity() {
        return creativity;
    }
    
    public void setCreativity(Double creativity) {
        this.creativity = creativity;
    }
    
    public String getKeywordId() {
        return keywordId;
    }
    
    public void setKeywordId(String keywordId) {
        this.keywordId = keywordId;
    }
    
    public String getTags() {
        return tags;
    }
    
    public void setTags(String tags) {
        this.tags = tags;
    }
    
    public String getCategory() {
        return category;
    }
    
    public void setCategory(String category) {
        this.category = category;
    }
    
    // Builder 模式
    public static Builder builder() {
        return new Builder();
    }
    
    public static class Builder {
        private ContentGenerationRequest request;
        
        public Builder() {
            this.request = new ContentGenerationRequest();
        }
        
        public Builder targetKeywords(List<String> targetKeywords) {
            request.setTargetKeywords(targetKeywords);
            return this;
        }
        
        public Builder contentType(String contentType) {
            request.setContentType(contentType);
            return this;
        }
        
        public Builder contentLength(Integer contentLength) {
            request.setContentLength(contentLength);
            return this;
        }
        
        public Builder targetAudience(String targetAudience) {
            request.setTargetAudience(targetAudience);
            return this;
        }
        
        public Builder writingStyle(String writingStyle) {
            request.setWritingStyle(writingStyle);
            return this;
        }
        
        public Builder companyInfo(String companyInfo) {
            request.setCompanyInfo(companyInfo);
            return this;
        }
        
        public Builder productInfo(String productInfo) {
            request.setProductInfo(productInfo);
            return this;
        }
        
        public Builder contextInfo(String contextInfo) {
            request.setContextInfo(contextInfo);
            return this;
        }
        
        public Builder language(String language) {
            request.setLanguage(language);
            return this;
        }
        
        public Builder seoOptimized(Boolean seoOptimized) {
            request.setSeoOptimized(seoOptimized);
            return this;
        }
        
        public Builder referenceUrls(List<String> referenceUrls) {
            request.setReferenceUrls(referenceUrls);
            return this;
        }
        
        public Builder customParameters(Map<String, Object> customParameters) {
            request.setCustomParameters(customParameters);
            return this;
        }
        
        public Builder userId(String userId) {
            request.setUserId(userId);
            return this;
        }
        
        public Builder title(String title) {
            request.setTitle(title);
            return this;
        }
        
        public Builder description(String description) {
            request.setDescription(description);
            return this;
        }
        
        public Builder tone(String tone) {
            request.setTone(tone);
            return this;
        }
        
        public Builder targetWordCount(Integer targetWordCount) {
            request.setTargetWordCount(targetWordCount);
            return this;
        }
        
        public Builder additionalRequirements(String additionalRequirements) {
            request.setAdditionalRequirements(additionalRequirements);
            return this;
        }
        
        public Builder merchantId(String merchantId) {
            request.setMerchantId(merchantId);
            return this;
        }
        
        public Builder creativity(Double creativity) {
            request.setCreativity(creativity);
            return this;
        }
        
        public Builder keywordId(String keywordId) {
            request.setKeywordId(keywordId);
            return this;
        }
        
        public Builder tags(String tags) {
            request.setTags(tags);
            return this;
        }
        
        public Builder category(String category) {
            request.setCategory(category);
            return this;
        }
        
        public ContentGenerationRequest build() {
            return request;
        }
    }
}